home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / CMPLTPAS / BOXSTUFF.PAS < prev    next >
Pascal/Delphi Source File  |  1988-07-13  |  4KB  |  133 lines

  1. {--------------------------------------------------------------}
  2. {                          BoxStuff                            }
  3. {                                                              }
  4. {           Demonstration unit -- draws text boxes             }
  5. {                                                              }
  6. {                             by Jeff Duntemann                }
  7. {                             Turbo Pascal V5.0                }
  8. {                             Last update 7/13/88              }
  9. {                                                              }
  10. {     From: COMPLETE TURBO PASCAL 5.0  by Jeff Duntemann       }
  11. {    Scott, Foresman & Co., Inc. 1988   ISBN 0-673-38355-5     }
  12. {--------------------------------------------------------------}
  13.  
  14.  
  15. UNIT BoxStuff;
  16.  
  17.  
  18. INTERFACE
  19.  
  20.  
  21. USES Crt;     { For GotoXY }
  22.  
  23. TYPE
  24.   GrafRec = RECORD
  25.               ULCorner,
  26.               URCorner,
  27.               LLCorner,
  28.               LRCorner,
  29.               HBar,
  30.               VBar,
  31.               LineCross,
  32.               TDown,
  33.               TUp,
  34.               TRight,
  35.               TLeft : String[4]
  36.             END;
  37.  
  38. VAR
  39.   GrafChars : GrafRec;  { Contains box-drawing strings for MakeBox.}
  40.                         { Any program or unit that USES BoxStuff   }
  41.                         { can access the GrafChars variable just   }
  42.                         { as though it had been defined within the }
  43.                         { USEing program or unit.                  }
  44.  
  45.  
  46. {<<<< MakeBox >>>>}
  47. { This is all that the "outside world" really needs to see of the }
  48. { MakeBox procedure.  *How* it happens is irrelevant to using it. }
  49.  
  50. PROCEDURE MakeBox(X,Y,Width,Height : Integer;
  51.                   GrafChars        : GrafRec);
  52.  
  53.  
  54.  
  55. IMPLEMENTATION
  56.  
  57.  
  58. {<<<< DefineChars >>>>}
  59. { This procedure is called from the initialization part of the    }
  60. { unit, and fills the GrafChars record with the box characters.   }
  61. { Note that it is private to the BoxStuff unit, and *cannot* be   }
  62. { called from outside the unit.  Note that because it is not part }
  63. { of the INTERFACE, the full parameter list *must* be given here. }
  64.  
  65. PROCEDURE DefineChars(VAR GrafChars : GrafRec);
  66.  
  67. BEGIN
  68.   WITH GrafChars DO
  69.     BEGIN
  70.       ULCorner  := Chr(201);
  71.       URCorner  := Chr(187);
  72.       LLCorner  := Chr(200);
  73.       LRCorner  := Chr(188);
  74.       HBar      := Chr(205);
  75.       VBar      := Chr(186);
  76.       LineCross := Chr(206);
  77.       TDown     := Chr(203);
  78.       TUp       := Chr(202);
  79.       TRight    := Chr(185);
  80.       TLeft     := Chr(204)
  81.     END
  82. END;
  83.  
  84.  
  85.  
  86. { <<<<MakeBox>>>> }
  87. { Note here that the parameter line does not have to be repeated. }
  88. { (We gave the full parameter list definition in the INTERFACE.)  }
  89. { But since it does no harm, you might as well re-state the       }
  90. { parameter list.  That makes it easier to read the full source   }
  91. { for MakeBox. }
  92.  
  93. PROCEDURE MakeBox(X,Y,Width,Height : Integer;
  94.                   GrafChars        : GrafRec);
  95.  
  96. VAR
  97.   I,J : Integer;
  98.  
  99. BEGIN
  100.   IF X < 0 THEN X := (80-Width) DIV 2;    { Negative X centers box }
  101.   WITH GrafChars DO
  102.     BEGIN                                 { Draw top line }
  103.       GotoXY(X,Y); Write(ULCorner);
  104.       FOR I := 3 TO Width DO Write(HBar);
  105.       Write(URCorner);
  106.                                           { Draw bottom line }
  107.       GotoXY(X,(Y+Height)-1); Write(LLCorner);
  108.       FOR I := 3 TO Width DO Write(HBar);
  109.       Write(LRCorner);
  110.                                           { Draw sides }
  111.       FOR I := 1 TO Height-2 DO
  112.         BEGIN
  113.           GotoXY(X,Y+I); Write(VBar);
  114.           GotoXY((X+Width)-1,Y+I); Write(VBar)
  115.         END
  116.     END
  117. END;
  118.  
  119.  
  120. {-------------------------------------------------------------------}
  121. { <<<< BOXSTUFF INITIALIZATION SECTION >>>>                         }
  122. { The initialization section executes before the main block of any  }
  123. { Pascal program that USES BoxStuff.  Here, the initialization      }
  124. { section fills a record variable called GrafChars with box-drawing }
  125. { characters, so that the variable is initialized and ready to use  }
  126. { as soon as the main block begins executing.  The programmer does  }
  127. { not have to know ANYTHING about procedure DefineChars.            }
  128. {-------------------------------------------------------------------}
  129.  
  130. BEGIN
  131.   DefineChars(GrafChars);
  132. END.
  133.